#include "blockqueue.hpp"
#include <iostream>
#include <unistd.h>
#include <random>

void* Consumer(void* args)  //消费者
{
    Blockqueue<int>* bq = static_cast<Blockqueue<int>*>(args);
    sleep(5);
    while(true)
    {
        // 取出数据
        int data;
        bq->Pop(&data);

        // 处理数据
        std::cout << "Consumer ->" << data << std::endl;
        sleep(1);
    }
}

void* Producter(void* args)     //生产者
{
    Blockqueue<int>* bq = static_cast<Blockqueue<int>*>(args);
    srand(time(nullptr) ^ getpid());
    while (true)
    {
        //生产数据
        int data = rand() % 100 + 1;

        // 放入数据
        bq->Equeue(data);
        std::cout << "Producter ->" << data << std::endl;

    }
    
}

int main()
{
    Blockqueue<int>* _bq = new Blockqueue<int>();

    pthread_t c_pid,p_pid;

    pthread_create(&c_pid, nullptr, Consumer, _bq);
    pthread_create(&p_pid, nullptr, Producter, _bq);

    pthread_join(c_pid, nullptr);
    pthread_join(p_pid, nullptr);

    return 0;
}